﻿using System;
using WJP.ObjectModel;

namespace WJP.ManagedProperty
{
    /// <summary>
    /// 托管属性
    /// </summary>
    public interface IManagedProperty : IHasName
    {
        /// <summary>定义此属性的类型</summary>
        Type OwnerType { get; }

        /// <summary>
        /// 申明这个属性的类型
        ///
        /// 如果这个属性是一个扩展属性，则这个值与 OwnerType 不同。
        /// </summary>
        Type DeclareType { get; }

        /// <summary>属性类型</summary>
        Type PropertyType { get; }

        /// <summary>
        /// 全局索引
        ///
        /// 只在本次运行中有效，每次运行不保证一致。
        /// </summary>
        int GlobalIndex { get; }

        /// <summary>表示当前属性是否已经被注销、不再使用。</summary>
        bool IsUnregistered { get; }

        /// <summary>是否为扩展属性（一个类中为另一个类定义的扩展属性）</summary>
        bool IsExtension { get; }

        /// <summary>是否只读</summary>
        bool IsReadOnly { get; }

        /// <summary>如果此属性即是编译期属性，也不是只读的，则这个值表示该属性在对象中的索引。</summary>
        int TypeCompiledIndex { get; }
    }
}